#include <stdio.h>
#include "nuclei_sdk_hal.h"

#define GPIO_NUM  8

static uint32_t GPIO_RISE_INT[] = {0,1,2,3,4,5,6,7};


int gpio3_irq_count=0;
int gpio4_irq_count=0;
int gpio5_irq_count=0;
int gpio6_irq_count=0;


void gpio3_handler(void)
{  
    printf("Enter gpio3_handler\r\n");
    gpio3_irq_count++;
    gpio_clear_interrupt(GPIO,(0x1<<3),GPIO_INT_RISE);
}

void gpio4_handler(void)
{  
    printf("Enter gpio4_handler\r\n");
    gpio4_irq_count++;
    gpio_clear_interrupt(GPIO,(0x1<<4),GPIO_INT_FALL);
}


void gpio5_handler(void)
{  
    printf("Enter gpio5_handler\r\n");
    gpio5_irq_count++;
    if(gpio5_irq_count==3){
            gpio5_irq_count=0;
            gpio_clear_interrupt(GPIO,(0x1<<5),GPIO_INT_HIGH);
    }
}


void gpio6_handler(void)
{  
    printf("Enter gpio6_handler\r\n");
    gpio6_irq_count++;
    if(gpio6_irq_count==3){
        gpio6_irq_count=0;
        gpio_clear_interrupt(GPIO,(0x1<<6),GPIO_INT_LOW);
    }
}




void gpio_config(void)
{
        gpio_enable_input(GPIO,(0x1<<GPIO_RISE_INT[3]));
        gpio_enable_interrupt(GPIO,(0x1<<GPIO_RISE_INT[3]),GPIO_INT_RISE);

        gpio_enable_input(GPIO,(0x1<<GPIO_RISE_INT[4]));
        gpio_enable_interrupt(GPIO,(0x1<<GPIO_RISE_INT[4]),GPIO_INT_FALL);


        gpio_enable_input(GPIO,(0x1<<GPIO_RISE_INT[5]));
        gpio_enable_interrupt(GPIO,(0x1<<GPIO_RISE_INT[5]),GPIO_INT_HIGH);

        gpio_enable_input(GPIO,(0x1<<GPIO_RISE_INT[6]));
        gpio_enable_interrupt(GPIO,(0x1<<GPIO_RISE_INT[6]),GPIO_INT_LOW);
    
}


int main(void)
{  
    __enable_irq();
	ECLIC_Register_IRQ(GPIO3_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio3_handler);

    ECLIC_Register_IRQ(GPIO4_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio4_handler);

    ECLIC_Register_IRQ(GPIO5_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio5_handler);

    ECLIC_Register_IRQ(GPIO6_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio6_handler);


    gpio_config();
    printf("config finish \r\n");
    while(1);
    

}
